home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
pascal
/
tpstat.exe
/
STAT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1990-08-08
|
45KB
|
1,590 lines
{--------------------------------------------------------------------------}
{ Norton Statistical Library }
{ }
{ Version 1.00 }
{ }
{ }
{ Copyright 1990 Norton Associcates }
{ All Rights Reserved }
{ Restricted by License }
{--------------------------------------------------------------------------}
{--------------------------------}
{ Unit: Stat }
{--------------------------------}
{$S-,R-,V-,D-,A+,B+,N+,E-,I-}
UNIT
stat;
INTERFACE
CONST
error_value = -99.9; { if any errors }
maxsize = 65520; { max segment size }
maxsingle = maxsize DIV (SIZEOF(SINGLE)); { max element size single array }
maxdouble = maxsize DIV (SIZEOF(DOUBLE)); { max element size double array }
maxlongint = maxsize DIV (SIZEOF(LONGINT)); { max element size longint array }
v1 : INTEGER = 1; { constants for uniform1 }
v2 : INTEGER = 1000; { constants for uniform1 }
v3 : INTEGER = 30000; { constants for uniform1 }
maxorder = 10;
maxmatrix = maxorder * 2 - 1;
uno = 1;
dos = 2;
zero = 0.0;
one = 1.0;
two = 2.0;
c2 = 2.0;
c3 = -3.0;
c4 = 4.0;
c5 = 5.0;
c6 = 6.0;
c11 = 11.0;
c12 = 12.0;
c17 = 17.0;
i_4 = 1.0/c4;
i_16 = 1.0/16.0;
i_35 = 1.0/35.0;
TYPE
single_array_type = SINGLE;
single_array_dummy = ARRAY[1..maxsingle] OF single_array_type;
single_array_pointer = ^single_array_dummy;
double_array_dummy = ARRAY[1..maxdouble] OF DOUBLE;
double_array_pointer = ^double_array_dummy;
longint_array_dummy = ARRAY[1..maxlongint] OF LONGINT;
longint_array_pointer = ^longint_array_dummy;
quartype = ARRAY[1..5] OF SINGLE;
arry_type = ARRAY[1..maxorder,1..maxorder] OF EXTENDED;
PROCEDURE create_single_array( num: WORD; VAR xx : single_array_pointer);
PROCEDURE delete_single_array( num: WORD; VAR xx : single_array_pointer);
PROCEDURE create_longint_array( num: WORD; VAR xx : longint_array_pointer);
PROCEDURE delete_longint_array( num: WORD; VAR xx : longint_array_pointer);
FUNCTION uniform1 : SINGLE;
FUNCTION rndnorm1( mean,standev:EXTENDED) :SINGLE;
FUNCTION rndnorm2( mean,standev:EXTENDED) :SINGLE;
PROCEDURE insert( n : WORD ; VAR a : single_array_pointer) ;
PROCEDURE qsort( n : WORD; VAR a : single_array_pointer) ;
PROCEDURE remove_avg( n : WORD; VAR a : single_array_pointer ; avg : SINGLE);
PROCEDURE means( n :WORD; a : single_array_pointer; VAR xmean,gmean,hmean,rmsmean :SINGLE);
PROCEDURE wxmean( num : WORD; a : single_array_pointer; freq : longint_array_pointer; VAR mean,sd,small,large : SINGLE);
PROCEDURE elem_stat( num:WORD; VAR a:single_array_pointer;
VAR small,large:SINGLE; VAR mean,sd:SINGLE);
PROCEDURE moments( n : WORD;
a : single_array_pointer;
VAR ave : SINGLE;
VAR std : SINGLE;
VAR skew : SINGLE;
VAR beta2 : SINGLE);
PROCEDURE quart( n : WORD; a : single_array_pointer; VAR quart : quartype);
FUNCTION percentile( n : WORD; a : single_array_pointer ;percent : SINGLE) : SINGLE;
FUNCTION standard_error(num : WORD ; sd : SINGLE; ntype:WORD) : SINGLE;
FUNCTION cdf_prob_to_sd(prob :SINGLE) : SINGLE;
FUNCTION cdf_sd_to_prob(sd:SINGLE) : SINGLE;
FUNCTION int_prob_to_sd(prob :SINGLE) : SINGLE;
FUNCTION int_sd_to_prob(sd:SINGLE) : SINGLE;
PROCEDURE corcoef(n: WORD; x,y:single_array_pointer; VAR r:SINGLE);
PROCEDURE autocor(n:WORD; x:single_array_pointer; lag :WORD; VAR auto:single_array_pointer);
PROCEDURE linfit(npts: WORD; x,y,sigmay: single_array_pointer; mode:WORD;VAR a, b, r:SINGLE);
FUNCTION determ(arry :arry_type; norder : INTEGER) : EXTENDED;
PROCEDURE polfit(npts: WORD;
x,y,sdy : single_array_pointer;
nterms,mode : INTEGER;
VAR a : single_array_pointer;
VAR r : SINGLE;
VAR se : SINGLE);
PROCEDURE mulreg(n : WORD; y,x,z : single_array_pointer;
VAR a : single_array_pointer;
VAR r : SINGLE;
VAR se : SINGLE);
PROCEDURE smooth121(n:WORD; VAR y: single_array_pointer);
PROCEDURE smooth14641(n:WORD; VAR y: single_array_pointer);
PROCEDURE smoothcurve(n:WORD; VAR y: single_array_pointer);
FUNCTION movavg(n: WORD; a : single_array_pointer; ma:WORD ; k : WORD) : SINGLE;
{*****************************************************************************}
{*****************************************************************************}
IMPLEMENTATION
{*****************************************************************************}
{*****************************************************************************}
PROCEDURE create_single_array( num: WORD; VAR xx : single_array_pointer);
{ Author : Norton Associates
Purpose: Properly create a single dimensioned heap array
Version: 1.0
Date : 5 May 1990 }
VAR
maxnumber : LONGINT; { proposed size of array in bytes }
BEGIN
maxnumber := LONGINT(LONGINT(num) * LONGINT(SIZEOF(single_array_type)));
IF (num < uno) or (num > maxsingle) THEN
BEGIN
WRITELN('Sorry the single array size is to large to create ');
WRITELN('You wanted = ',num:10,', The max single size = ',maxsingle:10);
HALT;
END;
GETMEM(xx,maxnumber);
END;
PROCEDURE delete_single_array( num: WORD; VAR xx : single_array_pointer);
{ Author : Norton Associates
Purpose: Properly delete a single dimensioned heap array
Version: 1.0
Date : 5 May 1990 }
VAR
maxnumber : LONGINT; { proposed size of array in bytes }
BEGIN
maxnumber := LONGINT(LONGINT(num) * LONGINT(SIZEOF(single_array_type)));
IF maxnumber > maxsize THEN
BEGIN
WRITELN('sorry the single array size is to large to delete ',maxnumber);
HALT;
END;
FREEMEM(xx,maxnumber);
END;
PROCEDURE create_longint_array( num: WORD; VAR xx : longint_array_pointer);
{ Author : Norton Associates
Purpose: Properly create a longint dimensioned heap array
Version: 1.0
Date : 5 May 1990 }
VAR
maxnumber : LONGINT; { proposed size of array in bytes }
BEGIN
maxnumber := LONGINT(LONGINT(num) * LONGINT(SIZEOF(single_array_type)));
IF (num < uno) or (num > maxlongint) THEN
BEGIN
WRITELN('sorry longint array size is to large to create',maxlongint);
HALT;
END;
GETMEM(xx,maxnumber);
END;
PROCEDURE delete_longint_array( num: WORD; VAR xx : longint_array_pointer);
{ Author : Norton Associates
Purpose: Properly delete a longint dimensioned heap array
Version: 1.0
Date : 5 May 1990 }
VAR
maxnumber : LONGINT; { proposed size of array in bytes }
BEGIN
maxnumber := LONGINT(LONGINT(num) * LONGINT(SIZEOF(single_array_type)));
IF maxnumber > maxsize THEN
BEGIN
WRITELN('sorry longint array size is to large to delete',maxnumber);
HALT;
END;
GETMEM(xx,maxnumber);
END;
PROCEDURE remove_avg(n : WORD; VAR a : single_array_pointer ; avg : SINGLE);
{ Author : Norton Associates
Purpose: Remove a constant value from an array
Version: 1.0
Date : 5 May 1990 }
VAR
j : WORD;
BEGIN
IF n > 0 THEN
BEGIN
FOR j := uno TO n D